<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:10pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Как объявить переменную? Объявление переменных в VBA<span style=" font-family:'DejaVu Sans'; font-size:11pt; font-weight:600;">			</span></p>
<p style=" margin-top:8px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">									Подробности							</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:30px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">																		Категория: </span><a href="http://macros-vba.ru/knigi/vba"><span style=" font-family:'DejaVu Sans'; font-size:11pt; text-decoration: underline; color:#0000ff;">Основы VBA</span></a><span style=" font-family:'DejaVu Sans'; font-size:11pt;">	</span></p>
<p style=" margin-top:0px; margin-bottom:8px; margin-left:30px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">					Опубликовано: 08 октября 2012				</span></p>
<p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt; font-weight:600; font-style:italic;">Что такое переменная?</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt; font-style:italic;">Имя, которое задается области компьютерной памяти и используется для хранения данных, называется переменной.</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> Переменные обеспечивают возможность временно сохранять данные в компьютерной программе и этими данными манипулировать. Переменные в операторах VBA, это практически тоже самое, что и переменные в алгебраических уравнениях. В переменных могут содержаться числа, текстовые данные или другая информация, которая во время написания оператора не известна, но будет доступна при его выполнении. При появлении имени переменной в операторе, VBA подставляет в этот оператор фактическое значение, которое хранится в текущий момент в области памяти.</span></p>
<p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt; font-weight:600; font-style:italic;">Требования к именам переменных</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">При выборе имен для переменных необходимо руководствоваться следующими правилами:</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- имена переменных должны начинаться с буквы;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- после первой буквы можно использовать любые сочетания букв, цифр и символов подчеркивания (_);</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- в именах переменных не могут содержаться пробелы, точки и символы, используемые VBA для обозначения математических действий и операций сравнения;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- имя переменной не может превышать 255 символов;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- имена переменных не должны повторять ключевые слова VBA;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- имя переменной (идентификатор) должно быть уникальным в пределах его области действия.</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">Кроме того, имена переменных не различают состояние регистра. Имена FirstRow и firstrow представляют для VBA одно и то же. При выборе имен переменных следует делать их максимально информативными.</span></p>
<p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt; font-weight:600; font-style:italic;">Неявное объявление переменных (implicit variable declaration)</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">Использование переменной в операторе VBAП является простейшим способом создания этой переменной. Такое создание переменной называется неявным объявлением переменной. Использование переменной в операторе, неявно указывает (объявляет) VBA о создании этой переменной. Когда переменная впервые появляется в операторе, VBA создает переменную, при этом для нее резервируется область памяти. Переменные, созданные неявным объявлением, всегда имеют тип данных Variant. Не смотря на удобство, неявное объявление переменных имеет определенные недостатки. Напрмер, вы можете дважды неявно объявить одну и ту же переменную, думая, что объявляете новую и при этом потерять ранее сохраненное значение. При неявном объявлении переменных могут возникать и другие проблемы, которые впоследствии очень трудно обнаружить. Кроме того, при таком объявлении замедляется скорость выполнения программного кода.</span></p>
<p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt; font-weight:600; font-style:italic;">Явное объявление переменных (explicit variable declaration)</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">Visual Basic for Application предоставляет возможность выполнять явное объявление переменных. Для того чтобы явно объявить переменную используется VBA-оператор Dim (сокращение от слова Dimension). Все переменные, которые создаются с этой формой ключевого слова Dim, являются переменными типа Variant. Для явного объявления переменной используется следующий синтаксис:</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="highlighter_65205"></a><span style=" font-family:'Courier New,courier'; font-size:11pt;">1</span><span style=" font-family:'Courier New,courier'; font-size:11pt;">.</span><span style=" font-family:'Courier New,courier'; font-size:11pt;">Dim</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> </span><span style=" font-family:'Courier New,courier'; font-size:11pt;">MyVar</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">Этот оператор указывает VBA создать переменную с именем MyVar.</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">Переменная объявляется только один раз в отдельной процедуре или модуле. Хорошим правилом считается все явные объявления переменных производить в одном месте в начале процедуры. Явное объявление переменных имеет ряд преимуществ перед неявным:</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- ускоряется выполнение программного кода;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- уменьшение количества ошибок в результате неправильного написания имен переменных;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- код становится более читабельным и понятным;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">-  нормализация использования переменных с заглавными буквами в именах.</span></p>
<p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt; font-weight:600; font-style:italic;">Задание типа данных переменной</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">Независимо от того, объявляются ли переменные явно или неявно, все они являются переменными типа Variant, если только не задается другой тип переменной в объявляющем ее операторе. Объявление переменной, при котором задается тип переменной, называется типизированным объявлением переменной.  Типизированное объявление переменной имеет следующий синтаксис:</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="highlighter_459364"></a><span style=" font-family:'Courier New,courier'; font-size:11pt;">1</span><span style=" font-family:'Courier New,courier'; font-size:11pt;">.</span><span style=" font-family:'Courier New,courier'; font-size:11pt;">Dim</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> </span><span style=" font-family:'Courier New,courier'; font-size:11pt;">MyVar As</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> </span><span style=" font-family:'Courier New,courier'; font-size:11pt;">Single</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">При типизированном объявлении переменной используется </span><a href="http://macros-vba.ru/knigi/vba/117-tipy-dannyh-visual-basic"><span style=" font-family:'DejaVu Sans'; font-size:11pt; font-style:italic; text-decoration: underline; color:#0000ff;">один из нескольких типов данных VBA</span></a><span style=" font-family:'DejaVu Sans'; font-size:11pt;">.</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">При таком объявлении переменных имеет несколько преимуществ:</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- ускоряется выполнение кода программ;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- повышается эффективность кода и сокращается объем памяти, требуемый для программы;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- легче читается и воспринимается программный код;</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">- легче обнаруживаются некоторые типы ошибок.</span></p>
<p style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt; font-weight:600; font-style:italic;">Использование специальных символов определения типа для объявления переменных</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">Существует еще один способ объявления переменных, при помощи специальных символов: !, @, #, $, %, &amp;. Эти символы называют символами определения типа. В более ранних разновидностях Basic такой способ определения переменных был единственно возможным, сейчас же использование оператора Dim с ключевым словом As делает определение типа переменной проще и понятнее. Тем не менее, при неявном объявлении переменной можно задать ее тип, добавив специальный символ в конец имени переменной. При этом этот символ необходимо будет добавлять каждый раз, когда используется имя переменной, иначе будет возникать runtime-ошибка. В таблице приведено соответствие между символами определения и типами данных.</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src="1.png" width="380" height="160" style="vertical-align: middle;" /><span style=" font-family:'DejaVu Sans'; font-size:11pt;">Таким образом, результат действия процедуры с явным объявлением переменной</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="highlighter_511083"></a><span style=" font-family:'Courier New,courier'; font-size:11pt;">1</span><span style=" font-family:'Courier New,courier'; font-size:11pt;">.</span><span style=" font-family:'Courier New,courier'; font-size:11pt;">Sub</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> </span><span style=" font-family:'Courier New,courier'; font-size:11pt;">HelloExcel_1()</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:11pt;">2.Dim</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> </span><span style=" font-family:'Courier New,courier'; font-size:11pt;">HelloMsg As</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> </span><span style=" font-family:'Courier New,courier'; font-size:11pt;">String</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:11pt;">3.HelloMsg = &quot;Hello, Excel!&quot;</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:11pt;">4.MsgBox HelloMsg</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:11pt;">5.End</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> </span><span style=" font-family:'Courier New,courier'; font-size:11pt;">Sub</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">будет таким-же как и результат действия с неявным объявлением переменной при помощи символа определения типа.</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a name="highlighter_320256"></a><span style=" font-family:'Courier New,courier'; font-size:11pt;">1</span><span style=" font-family:'Courier New,courier'; font-size:11pt;">.</span><span style=" font-family:'Courier New,courier'; font-size:11pt;">Sub</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> </span><span style=" font-family:'Courier New,courier'; font-size:11pt;">HelloExcel_2()</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:11pt;">2.HelloMsg$ = &quot;Hello, Excel!&quot;</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:11pt;">3.MsgBox HelloMsg$</span></p>
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Courier New,courier'; font-size:11pt;">4.End</span><span style=" font-family:'DejaVu Sans'; font-size:11pt;"> </span><span style=" font-family:'Courier New,courier'; font-size:11pt;">Sub</span></p>
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt;">	</span></p>
<p style=" margin-top:14px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'DejaVu Sans'; font-size:11pt; font-weight:600;">Другие материалы по теме:</span></p>
<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" font-family:'DejaVu Sans'; font-size:11pt;" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="http://macros-vba.ru/knigi/vba/119-option-explicit-vba"><span style=" text-decoration: underline; color:#0000ff;">				Option Explicit. Требование явного объявления переменных</span></a></li></ul></body></html>